home *** CD-ROM | disk | FTP | other *** search
/ Scene Explorer 2 / Scene Explorer 2.iso / !mags^packs! / izviestia_pl / 11.lzx / Izviestia_11 / Bonus_stuff / MultiView.e < prev    next >
Text File  |  2007-10-04  |  5KB  |  243 lines

  1. /*
  2.  * MultiView for OS 2.x by Szczepan/SubBlaBla
  3.  *
  4.  * Source tylko do celów edukacyjnych !!!
  5.  * Nie wolno pisaê programow tego typu w oparciu o ten source !!!
  6.  * 
  7.  */
  8.  
  9. MODULE  'dos/dos',
  10.         'fileid',
  11.         'libraries/fileid',
  12.         'libraries/fileid_iddefs',
  13.         'workbench/startup',
  14.         'tools/file',
  15.         'reqtools',
  16.         'libraries/reqtools',
  17.         'Fabio/ttparse_oo'
  18.  
  19.  
  20. -> bîëdy
  21.  
  22. ENUM ERR_CLI_ARGS=1,ERR_CHECK,ERR_ALLOC,ERR_LIB,OPENREQ,ERR_ICON
  23.  
  24. DEF fib:PTR TO fileinfo,
  25.     filename,
  26.     cli,                  -> CLI mode
  27.     lista:PTR TO LONG,    -> lista komend
  28.     ttype:PTR TO ttparse, -> ikona
  29.     info = TRUE           -> Show INFO ?
  30.  
  31. -> -----------------------------------------------------------------------
  32.  
  33. PROC main() HANDLE
  34.  
  35.   DEF ktr,
  36.       argmsg:PTR TO wbstartup,
  37.       wb_arg:PTR TO wbarg,
  38.       olddir,
  39.       myargs:PTR TO LONG,
  40.       rdargs,
  41.       mem,
  42.       len,
  43.       s
  44.  
  45. -> initializacja ikony (obiekt)
  46.  
  47.   NEW ttype.ttparse(TRUE)
  48.  
  49. -> pobranie ikony
  50.  
  51.   IF ttype.error()
  52.     Raise(ERR_ICON)
  53.   ELSE
  54.     s:=ttype.get('SHOWINFO')
  55.     IF s
  56.       UpperStr(s)
  57.       ktr := StrCmp(s,'NO')
  58.       IF ktr THEN info := FALSE
  59.     ENDIF
  60.   ENDIF
  61.  
  62.   VOID '$VER:  MultiView for OS 2.0 v.1.6 (04.01.97) by Leo'
  63.  
  64. -> Jak widaê jest to stary source. doîâczam go jako przykîad uûycia
  65. -> FileID.library a nie jako program uûytkowy. Gotowy program jest
  66. -> na Aminecie - util/sys/2b_mv_os2.lha - polecam !
  67.  
  68. -> otwieramy FileID.library
  69.  
  70.   IF (fileidbase := OpenLibrary('FileID.library',2))=NIL THEN Raise(ERR_LIB)
  71.  
  72.   IF wbmessage
  73.  
  74. -> Started from WB 
  75.  
  76.     argmsg := wbmessage
  77.     wb_arg := argmsg.arglist
  78.     olddir := CurrentDir(wb_arg.lock)
  79.  
  80.     IF argmsg.numargs > 1
  81.       FOR ktr := 1 TO argmsg.numargs
  82.         StrCopy(filename,'')
  83.         wb_arg++
  84.         IF wb_arg.lock
  85.           CurrentDir(wb_arg.lock)
  86.           filename := wb_arg.name
  87.           check()
  88.         ENDIF
  89.       ENDFOR
  90.       StrCopy(filename,'')
  91.     ELSE
  92.       loadreq()
  93.     ENDIF
  94.  
  95.   ELSE -> CLI mode
  96.  
  97.     IF rdargs := ReadArgs('FILE/A',myargs,NIL)
  98.       StrCopy(filename,myargs[NIL],ALL)
  99.       cli := TRUE
  100.     ELSE
  101.       StrCopy(filename,'')
  102.       loadreq()
  103.     ENDIF
  104.     IF rdargs THEN FreeArgs(rdargs)
  105.   ENDIF
  106.  
  107.   IF filename THEN check()
  108.  
  109. EXCEPT DO
  110.  
  111.   IF olddir     THEN CurrentDir(olddir)
  112.   IF fileidbase THEN CloseLibrary(fileidbase)
  113.   IF fib        THEN FiFreeFileInfo(fib)
  114.  
  115.   END ttype
  116.  
  117.   SELECT exception
  118.     CASE ERR_CHECK
  119.       EasyRequestArgs(NIL,[20,NIL,NIL,'Bîâd przy sprawdzaniu pliku : \s !','Ok'],NIL,[filename])
  120.     CASE ERR_ALLOC
  121.       EasyRequestArgs(NIL,[20,NIL,NIL,'Nie mogë allokowaê struktury !','Ok'],NIL,NIL)
  122.     CASE ERR_LIB
  123.       EasyRequestArgs(NIL,[20,NIL,NIL,'Nie mogë otworzyê FileID.library !','Ok'],NIL,NIL)
  124.     CASE OPENREQ
  125.       EasyRequestArgs(NIL,[20,NIL,NIL,'Nie mogë otworzyê ReqTools.library !','Ok'],NIL,NIL)
  126.   ENDSELECT
  127.  
  128.   CleanUp(NIL)
  129.  
  130. ENDPROC
  131.  
  132. PROC check()  -> Sprawdzanie typu pliku
  133.  
  134. -> Gîówna procedura sprawdzajâca typ pliku
  135.  
  136.   DEF str[200]:STRING
  137.  
  138. -> alokujemy strukturë
  139.  
  140.   IF (fib := FiAllocFileInfo())=NIL THEN Raise(ERR_ALLOC)
  141.  
  142. -> sprawdzamy plik 'filename'
  143.  
  144.   IF FiIdentifyFromName(fib,filename) = NIL
  145.     IF info
  146.     StringF(str,'Plik : \s\nType : \s',filename,fib.description)
  147.       IF cli
  148.         WriteF('\n\s\n',str)
  149.       ELSE
  150.         EasyRequestArgs(NIL,[20,NIL,'MultiView Info','\s','Ok'],NIL,[str])
  151.       ENDIF
  152.     ENDIF
  153.     runcmd()
  154.   ELSE
  155.     Raise(ERR_CHECK)
  156.   ENDIF
  157.  
  158. ENDPROC
  159.  
  160. PROC runcmd() -> Uruchamianie programu
  161.  
  162.   DEF cmd[200]:STRING,  -> Komenda
  163.       run[512]:STRING,  -> Execute() string
  164.       id,               -> typ pliku
  165.       noquotes=FALSE    -> nie dodawaê "" do nazwy
  166.  
  167.   id := fib.id
  168.  
  169.   IF id = FID_AMIGAEMODULE
  170.     cutext()
  171.     noquotes := TRUE
  172.   ENDIF
  173.  
  174.   StringF(run,'\z\r\d[3]',id) 
  175.  
  176.   cmd  := ttype.get(run)
  177.   IF cmd
  178.   ELSE
  179.     cmd := ttype.get('DEFAULT')
  180.   ENDIF
  181.  
  182.   IF noquotes
  183.     StringF(run,'Run \s\s \0\n',cmd,filename)
  184.   ELSE
  185.     StringF(run,'Run \s "\s" \0\n',cmd,filename)
  186.   ENDIF
  187.  
  188.   Execute(run,NIL,NIL)
  189.  
  190. ENDPROC
  191.  
  192. PROC cutext() -> Obcinanie rozszerzeï
  193.  
  194.   DEF temp[256]:STRING,
  195.       pos
  196.  
  197.   temp[NIL] := NIL
  198.   pos := StrLen(filename)-1
  199.   WHILE filename[pos]<>"."
  200.     pos--
  201.   ENDWHILE
  202.   MidStr(temp,filename,NIL,pos)
  203.   filename[NIL] := NIL
  204.   StringF(filename,temp)
  205.  
  206. ENDPROC
  207.  
  208. PROC loadreq() HANDLE
  209.  
  210. DEF temp[120]:STRING,
  211.     test[2]:STRING,
  212.     dir,
  213.     req:PTR TO rtfilerequester
  214.  
  215.   req := NIL
  216.   IF (reqtoolsbase:=OpenLibrary('reqtools.library',38))=NIL THEN Raise(ERR_REQ)
  217.   IF (req:=RtAllocRequestA(RT_FILEREQ,NIL))=NIL THEN Raise(ERR_ALLOC)
  218.   IF RtFileRequestA(req,filename,'Wybierz plik',NIL)
  219.     StrCopy(temp,req.dir,ALL)
  220.     AddPart(temp,filename,256)
  221.     StrCopy(filename,temp)
  222.   ELSE
  223.     name := FALSE
  224.   ENDIF
  225.  
  226. EXCEPT DO
  227.  
  228.   IF req THEN RtFreeRequest(req)
  229.   IF reqtoolsbase THEN CloseLibrary(reqtoolsbase)
  230.  
  231.   SELECT exception
  232.     CASE ERR_ALLOC
  233.       StrCopy(error,'Nie mogë allokowaê struktury !')
  234.       err := TRUE
  235.     CASE ERR_REQ
  236.       StrCopy(error,'Nie mogë otworzyê ReqTools.library !')
  237.       err := TRUE
  238.   ENDSELECT
  239.  
  240.   ReThrow()
  241.  
  242. ENDPROC
  243.